# Лекция: TestNG в Java

TestNG - это фреймворк для написания и выполнения автоматизированных тестов в Java. Он обладает большим количеством возможностей по сравнению с JUnit, такими как поддержка групп тестов, зависимостей между тестами, параллельного выполнения тестов и т.д.

## Добавление TestNG в проект

Чтобы использовать TestNG, нужно добавить его в зависимости проекта.

```xml
<dependencies>
    <dependency>
        <groupId>org.testng</groupId>
        <artifactId>testng</artifactId>
        <version>7.4.0</version>
        <scope>test</scope>
    </dependency>
</dependencies>
```

## Написание тестов

Тесты в TestNG пишутся с помощью аннотации `@Test`. Каждый тестовый метод должен быть публичным, не принимать аргументы и не возвращать результат.

```java
import org.testng.annotations.Test;
import static org.testng.Assert.*;

public class MyTests {
    @Test
    public void testAddition() {
        assertEquals(5, 2 + 3);
    }
}
```

## Запуск тестов

Тесты можно запустить из IDE или с помощью Maven командой `mvn test`.

---

# Практические задания

1. **Напишите тест для проверки сложения двух чисел.** (Сложность: 1/5)
```java
@Test
public void testAddition() {
    assertEquals(5, 2 + 3);
}
```

2. **Напишите тест для проверки вычитания двух чисел.** (Сложность: 1/5)
```java
@Test
public void testSubtraction() {
    assertEquals(1, 3 - 2);
}
```

3. **Напишите тест для проверки деления на ноль. Ожидается исключение `ArithmeticException`.** (Сложность: 2/5)
```java
@Test(expectedExceptions = ArithmeticException.class)
public void testDivisionByZero() {
    int result = 5 / 0;
}
```

4. **Напишите тест для проверки метода `equals` класса `String`.** (Сложность: 2/5)
```java
@Test
public void testStringEquals() {
    assertTrue("abc".equals("abc"));
    assertFalse("abc".equals("def"));
}
```

5. **Создайте класс `Calculator` с методами `add`, `subtract`, `multiply` и `divide`. Напишите тесты для этих методов.** (Сложность: 3/5)
```java
public class Calculator {
    public int add(int a, int b) {
        return a + b;
    }

    public int subtract(int a, int b) {
        return a - b;
    }

    public int multiply(int a, int b) {
        return a * b;
    }

    public double divide(int a, int b) {
        return (double) a / b;
    }
}

@Test
public void testCalculator() {
    Calculator calculator = new Calculator();

    assertEquals(5, calculator.add(2, 3));
    assertEquals(1, calculator.subtract(3, 2));
    assertEquals(6, calculator.multiply(2, 3));
    assertEquals(2.0, calculator.divide(6, 3));
}
```